import { Sequelize } from 'sequelize';
import dotenv from 'dotenv';


// 加载环境变量
dotenv.config();
// 自定义日志函数，记录SQL查询及其执行时间
const customLogger = (query: string, queryTime?: number) => {
  const timeStr = queryTime ? `[执行时间: ${queryTime}ms]` : '';
  //console.log(`\x1b[34m[Sequelize]\x1b[0m ${timeStr} ${query}`);
};


// 从环境变量读取连接字符串，不存在则回退到旧配置
const DATABASE_URL = process.env.DATABASE_URL || 'postgresql://cc:7898ikuojl@localhost:5432/cc';
// 创建Sequelize实例
export const sequelize = new Sequelize(DATABASE_URL, {
  host: 'localhost',
  port: 5432,
  dialect: 'postgres',
  logging: customLogger, // 使用自定义日志函数
  benchmark: true, // 启用基准测试，计算查询执行时间
  timezone: '+08:00', // 设置时区为中国标准时间 (UTC+8)
  dialectOptions: {
    timezone: '+08:00', // PostgreSQL 连接时区
    useUTC: false, // 不使用UTC时间
  },
  define: {
    timestamps: true, // 默认为模型添加createdAt和updatedAt
    underscored: false, // 不使用下划线命名法，保持驼峰命名
  },
  pool: {
    max: 5, // 连接池最大连接数
    min: 0, // 连接池最小连接数
    acquire: 30000, // 获取连接的最大超时时间
    idle: 10000 // 连接在释放前可以空闲的最长时间
  }
});

// 数据库连接初始化
export async function initDatabase() {
  try {
    await sequelize.authenticate();
    console.log('✅ 数据库连接成功');
  } catch (error) {
    console.error('❌ 数据库连接失败:', error);
    throw error;
  }
}

// 数据库断开连接
export async function closeDatabase() {
  await sequelize.close();
}